package jp.syuriken.snsw.terenaibot;

/**
 * ラッパ例外
 * 
 * @author $Author: snswinhaiku.lo@gmail.com $
 * @version 0.1
 */
@SuppressWarnings("serial")
public abstract class WrapperException extends Exception {
	
	/**
	 * インスタンスを生成する。
	 * 
	 */
	public WrapperException() {
		super();
	}
	
	/**
	 * インスタンスを生成する。
	 * 
	 * @param exception 例外
	 */
	protected WrapperException(Throwable exception) {
		super(exception);
	}
	
	public abstract boolean exceededRateLimitation();
	
	public abstract String getErrorDescription();
	
	public abstract String getErrorName();
	
	@Override
	public String getLocalizedMessage() {
		return String.format("%s:(%s)%s", getStatusCode(), getErrorName(), getErrorDescription());
	}
	
	/**
	 * RateLimitStatusを取得する。ない場合null
	 * 
	 * @return RateLimitStatusオブジェクト。
	 */
	public abstract Object getRateLimitStatus();
	
	/**
	 * ステータスコードを取得する。
	 * 
	 * @return ステータスコード。
	 */
	public abstract int getStatusCode();
	
	public abstract boolean isCausedByNetworkIssue();
}
